package edu.asselvi.seguros.reports;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import edu.asselvi.seguros.dao.CidadeDao;
import edu.asselvi.seguros.dao.ClienteDao;
import edu.asselvi.seguros.dao.EnderecoDao;
import edu.asselvi.seguros.dao.EstadoDao;
import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErrosGeral;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Cidade;
import edu.asselvi.seguros.pojo.Cliente;
import edu.asselvi.seguros.pojo.Endereco;
import edu.asselvi.seguros.pojo.Estado;
import edu.asselvi.seguros.utils.Utils;

public class RelClientes extends DbUtils {
	
	public void exibir() {
		
		
		/*
		 * print string format para fazer o controle de quebra
		 * %  : representa o texto
		 * -  : alinhamento justificado a esquerda
		 * 5  : numero de espacos
		 * s  : space
		 * %n : quebra de linha
		 */
		System.out.printf("%-5s", "Cod");
		System.out.printf("%-20s", "Nome");
		System.out.printf("%-12s", "Nasc");
		System.out.printf("%-20s", "Rua");
		System.out.printf("%-15s", "Cidade");
		System.out.printf("%-4s", "UF");
		System.out.printf("%n");

		Connection conn = null;
		try {
			
			conn = new ConnectionFactory().getConnection();
		
			Utils utils = new Utils();
			
			List<Cliente> clientes = new ClienteDao(conn).list();
			for (Cliente cliente : clientes) {
				Endereco endereco = new EnderecoDao(conn).getById(cliente.getFk_id_endereco());
				//joins
				Cidade cidade = new CidadeDao(conn).getCidade(endereco.getFk_id_cidade());
				Estado estado = new EstadoDao(conn).getEstado(cidade.getFk_id_estado());
				
				System.out.printf("%-5s", cliente.getId_cliente());
				System.out.printf("%-20s", cliente.getNome());
				System.out.printf("%-12s", utils.converteData(cliente.getNascimento()) );
				System.out.printf("%-20s", endereco.getRua());
				System.out.printf("%-15s", cidade.getNome());
				System.out.printf("%-4s", estado.getAbreviacao());
				System.out.printf("%n");
			}
		
		
		} catch (SegurosException e) {
			System.err.println(e.getMessage());
			
		} catch (SQLException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_CONEXAO);
			
		} finally {
			close(conn);
		}

	
		
		
	}

}
